#include <stdio.h>
#include <malloc.h>


typedef struct {
    char *name;//8
    int age;//4
} Person;
// typedef struct Person  ： 定义  结构体  名称为 Person

struct person {
    int age;
    char name[10];
    short height;
};
struct person tom;

struct person1 {
    char name[10];
    int age;
    short height;
};
struct person1 jon;

/**
 * 内存对齐理论：
 * tom
 * 第一个类型 为 int 第二个类型为char
    int占4个字节，char 占一个字节
    4/1可以整除，所以现在所占的字节总数为 4+1*10=14个字节
    第二个类型为char ，第三个类型为short short所占2个字节
    现在所占的总的字节为14
    14/2可以整除，因此不用再补内存，所以现在总的内存为 14+2=16
    最后用现在总的所占字节除以结构体中最大的类型所占的字节，这里是int 4个字节
    发现可以整除16/4 ，因此不用补齐。

    jon
    第一个类型 为 char 第二个类型为int
    int占4个字节，char 占一个字节
    1/4不可以整除且总的所占字节为10 10/4也无法整除，所以需要补齐补 2个字节
    现在所占的总的字节为 10 +4 +2（补的）=16；
    第二个类型为int ，第三个类型为short short所占2个字节
    现在所占的总的字节为16
    16/2可以整除，因此不用再补内存，所以现在总的内存为 16+2=16
    最后用现在总的所占字节除以结构体中最大的类型所占的字节，这里是int 4个字节
    发现不可以整除18/4 ，因此需要再补齐2个。所以所占的总的字节为 10 +2 +4 +2+2=20个字节。

 * @return
 */

int main() {

    int atom = sizeof(tom);
    int ajon = sizeof(jon);
    printf("atom length: %d\n", atom);//16
    printf("ajon length: %d\n", ajon);//20


    int len = sizeof(Person);
    Person *p = malloc(len);
    char *address = &"zhangsan";
//    p->name = address;
    p->age = 18;
    printf("Person length: %d\n", len);//内存对齐理论,提高内存读取效率
//    printf("Person.name: %s\n", p->name );
    printf("Person.age: %d\n", p->age);


    return 0;
}
